package com.itheima.rabbitmq.config;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {

    public static final String EXCHANGE_NAME = "boot_topic_exchange";
    public static final String QUEUE_NAME = "boot_queue";

    //1.交换机
    @Bean("bootExchange")
    public Exchange bootExchange(){
        return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
    }


    //2.Queue 队列
    @Bean("bootQueue")
    public Queue bootQueue(){
        return QueueBuilder
                .durable(QUEUE_NAME)
                .withArgument("x-message-ttl", 30000)
                .withArgument("x-dead-length",10)
                .withArgument("x-dead-letter-roting-key","dead.key")
                .withArgument("x-dead-letter-exchange","dead_exchange")
                .build();
    }

    //3. 队列和交互机绑定关系 Binding
    /*
        1. 知道哪个队列
        2. 知道哪个交换机
        3. routing key
     */
    @Bean
    public Binding bindQueueExchange(@Qualifier("bootQueue") Queue queue, @Qualifier("bootExchange") Exchange exchange){
        return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs();
    }
    //死信队列的交换机
@Bean("dead_exchange")
public Exchange dead_exchange(){
    return ExchangeBuilder.topicExchange("dead_exchange").durable(true).build();
}
    //死信队列的队列
    @Bean("dead_Queue")
    public Queue dead_Queue(){
        return QueueBuilder
                .durable("dead_Queue")
                .build();
    }

    @Bean
    public Binding DebindQueueExchange(@Qualifier("dead_Queue") Queue queue, @Qualifier("dead_exchange") Exchange exchange){
        return BindingBuilder.bind(queue).to(exchange).with("dead.#").noargs();
    }

}
